import { logUnderline, logTitle, logSubTitle, log } from "../utils/index";
function use() {
    logTitle("四、函数");
    logSubTitle("1、书写和自动类型推断");
    logSubTitle("2、可选参数和默认参数");
    logSubTitle("3、this"); // 待填充
    logSubTitle("4、函数重载"); // 待填充

    // ***1、书写和自动类型推断***
    // 最全写法
    let all: (x: string) => number = function (content: string): number {
        return 0;
    };

    // 两种省略写法
    let some1: (x: string) => number = function (content) {
        return 0;
    };
    let some2 = function (content: string): number {
        return 0;
    };

    // ***2、可选参数和默认参数***
    function getDemo(param1: number, param2: number): void {}
    getDemo(1, 2);
    // getDemo(1); // 少参数，报错

    // 可选参数 函数的两种写法 (可选参数必须放在最后)
    function getDemoCanSelect1(param1: number, param2?: number): void {}
    function getDemoCanSelect2(param1: number, param2: number = 2): void {}

    getDemoCanSelect1(1);
    getDemoCanSelect2(1);

    // 剩余参数
    function getRes(param1: number, ...param2: number[]): void {}
    getRes(1, 2, 3, 4, 5);

    // ***4、函数重载***
    // 通过不同的参数或参数类型、不同返回值来来区分，写成一个列表，如下：
    function getCase(param1: string, param2: number): number;
    function getCase(param1: number): string;
    // 注意，下方any 的这个不是重载，此处只重载了俩
    function getCase(x: any): any {
        console.log("x: ", x);
        if (typeof x === "number") {
            return 0;
        }
        return "string";
    }

    let paramsArr: any = [["s", 0], [1], []];
    let res = paramsArr.map((item: any) => getCase(item[0], item[1]));
    log("函数重载: " + res);

    logUnderline();
}

export default { use };
